[id].tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { PermissionAction } from '@supabase/shared-types/out/constants'
  2. import { useParams } from 'common'
  3. import { PageContainer, PageSection, PageSectionContent, ShimmeringLoader } from 'ui-patterns'
  4. import { PublicationsTables } from '@/components/interfaces/Database/Publications/PublicationsTables'
  5. import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout'
  6. import { DefaultLayout } from '@/components/layouts/DefaultLayout'
  7. import { PageLayout } from '@/components/layouts/PageLayout/PageLayout'
  8. import { NoPermission } from '@/components/ui/NoPermission'
  9. import { useDatabasePublicationsQuery } from '@/data/database-publications/database-publications-query'
  10. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  11. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  12. import type { NextPageWithLayout } from '@/types'
  13. const DatabasePublications: NextPageWithLayout = () => {
  14. const { ref, id } = useParams()
  15. const { data: project } = useSelectedProjectQuery()
  16. const { can: canViewPublications, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
  17. PermissionAction.TENANT_SQL_ADMIN_READ,
  18. 'publications'
  19. )
  20. const { data: publications = [], isPending } = useDatabasePublicationsQuery({
  21. projectRef: project?.ref,
  22. connectionString: project?.connectionString,
  23. })
  24. const selectedPublication = publications.find((pub) => pub.id === Number(id))
  25. if (isPermissionsLoaded && !canViewPublications) {
  26. return <NoPermission isFullPage resourceText="view database publications" />
  27. }
  28. return (
  29. <PageLayout
  30. title={isPending ? <ShimmeringLoader className="w-40" /> : (selectedPublication?.name ?? '')}
  31. breadcrumbs={[
  32. {
  33. label: 'Publications',
  34. href: `/project/${ref}/database/publications`,
  35. },
  36. ]}
  37. size="large"
  38. >
  39. <PageContainer size="large">
  40. <PageSection>
  41. <PageSectionContent>
  42. <PublicationsTables />
  43. </PageSectionContent>
  44. </PageSection>
  45. </PageContainer>
  46. </PageLayout>
  47. )
  48. }
  49. DatabasePublications.getLayout = (page) => (
  50. <DefaultLayout>
  51. <DatabaseLayout title="Publications">{page}</DatabaseLayout>
  52. </DefaultLayout>
  53. )
  54. export default DatabasePublications